/* 
    请求模块
 */

import axios from 'axios'
import store from '@/store'
import JSONBig from 'json-bigint'

const request = axios.create({
    // 接口的基准路径
    baseURL: 'http://toutiao.itheima.net',
    
    // `transformRequest` 允许在向服务器发送前，修改请求数据
    // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
    // 后面数组中的函数必须返回一个字符串，或 ArrayBuffer，或 Stream

   
    // `transformResponse` 在传递给 then/catch 前，允许修改响应数据
    // 自定义后端返回的原始数据
    // data: 后端返回的原始数据，说白了就是 JSON 格式的字符串
    transformResponse: [function (data ) {
        try {
            return JSONBig.parse(data)
        } catch (err) {
            return data
        }

        // axios 默认会在内部这样来处理后端返回的数据
        // return JSON.parse(data);
    }]
})

// 添加请求拦截器，在文档复制 
request.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // config：本次请求的请求配置对象
    const { user } = store.state
    if (user && user.token) {
        config.headers.Authorization = `Bearer ${user.token}`
    }
    // 注意：这里务必要返回config
    return config;
  }, function (error) {
    // 对请求错误做些什么（请求还没发出去 ）
    return Promise.reject(error);
});

// 响应拦截器

export default request